package br.com.velp.sudecap.entidade;

import br.com.velp.sudecap.hibernate.intercept.Auditable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;

/**
 * <sumario>
 * <objetivo> "Rastreabilidade" </objetivo>
 * <autor> EDUARDO SANTOS DE OLIVEIRA </autor>
 * <versao>1.0.0.0</versao>
 * <data_criacao> 16.12.2013 </data_criacao>
 * <data_ultima_alteracao> N/A </data_ultima_alteracao>
 * <descricao> Bean Responsável Pelo Mapeamento da Tabela EMPRESTIMO </descricao>
 * </sumario>
 */
@Entity
@Table(name = "TB_EMPRESTIMO")
@Auditable(logTableName = "TB_EMPRESTIMO_LOG")
public class Emprestimo extends EntityBase {
    
    public static final Long serialVersionUID = 1L;
    
    @Id
    @SequenceGenerator(name = "SQ_ID_EMPRESTIMO", sequenceName = "SQ_ID_EMPRESTIMO", allocationSize = 1)
    @GeneratedValue(generator = "SQ_ID_EMPRESTIMO")
    @Column(name = "ID_EMPRESTIMO", nullable = false, unique = true)                                            
    private Long id;
    
    @Column(name = "USUARIO_CADASTRO", nullable = false)                                            
    private Long idUsuarioCadastro;
    
    @Column(name = "USUARIO_ALTERACAO")                                            
    private Long idUsuarioAlteracao;
    
    @Column(name = "OBSERVACAO", length = 4000)                                            
    private String observacao;
    
    @Column(name = "DESTINO", length = 100)                                            
    private String destino;
    
    @Column(name = "SITUACAO", length = 1)                                            
    private String situacao;
    
    @Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "DATA_EMPRESTIMO")                                            
    private Date dataEmprestimo;
    
    @Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "DATA_DEVOLUCAO")                                            
    private Date dataDevolucao;
    
    @Temporal(javax.persistence.TemporalType.DATE)
    @Column(name = "DATA_PREVISTA_DEVOLUCAO")                                            
    private Date dataPrevistaDevolucao;
    
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    @Column(name = "DATA_CADASTRO", nullable = false)                                            
    private Date dataCadastro;
    
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    @Column(name = "DATA_ALTERACAO")                                            
    private Date dataAlteracao;
    
    @Fetch(FetchMode.SELECT)
    @ManyToOne()
    @JoinColumn(name = "ID_CONSULENTE")
    private Consulente consulente;
    
    @Fetch(FetchMode.SELECT)
    @ManyToOne()
    @JoinColumn(name = "ID_DOCUMENTO")
    private Documento documento;

    public Emprestimo() {
    }

    public Emprestimo(Long id) {
        this.id = id;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public Long getIdUsuarioCadastro() {
        return idUsuarioCadastro;
    }

    public void setIdUsuarioCadastro(Long idUsuarioCadastro) {
        this.idUsuarioCadastro = idUsuarioCadastro;
    }

    public Long getIdUsuarioAlteracao() {
        return idUsuarioAlteracao;
    }

    public void setIdUsuarioAlteracao(Long idUsuarioAlteracao) {
        this.idUsuarioAlteracao = idUsuarioAlteracao;
    }

    public String getObservacao() {
        return observacao;
    }

    public void setObservacao(String observacao) {
        this.observacao = observacao;
    }

    public String getDestino() {
        return destino;
    }

    public void setDestino(String destino) {
        this.destino = destino;
    }

    public String getSituacao() {
        return situacao;
    }

    public void setSituacao(String situacao) {
        this.situacao = situacao;
    }

    public Date getDataEmprestimo() {
        return dataEmprestimo;
    }

    public void setDataEmprestimo(Date dataEmprestimo) {
        this.dataEmprestimo = dataEmprestimo;
    }

    public Date getDataDevolucao() {
        return dataDevolucao;
    }

    public void setDataDevolucao(Date dataDevolucao) {
        this.dataDevolucao = dataDevolucao;
    }

    public Date getDataPrevistaDevolucao() {
        return dataPrevistaDevolucao;
    }

    public void setDataPrevistaDevolucao(Date dataPrevistaDevolucao) {
        this.dataPrevistaDevolucao = dataPrevistaDevolucao;
    }

    public Date getDataCadastro() {
        return dataCadastro;
    }

    public void setDataCadastro(Date dataCadastro) {
        this.dataCadastro = dataCadastro;
    }

    public Date getDataAlteracao() {
        return dataAlteracao;
    }

    public void setDataAlteracao(Date dataAlteracao) {
        this.dataAlteracao = dataAlteracao;
    }

    public Consulente getConsulente() {
        return consulente;
    }

    public void setConsulente(Consulente consulente) {
        this.consulente = consulente;
    }

    public Documento getDocumento() {
        return documento;
    }

    public void setDocumento(Documento documento) {
        this.documento = documento;
    }    
    
}
